package main

import (
	"fmt"
	"sync"
)

// 编写一个程序，使用通道实现两个协程之间的通信。
// 一个协程生成从1到10的整数，并将这些整数发送到通道中，另一个协程从通道中接收这些整数并打印出来
func channer() {
	var wg sync.WaitGroup
	wg.Add(2)
	ch := make(chan int)
	// 第一个协程
	go func() {
		defer wg.Done()
		for i := 0; i < 100; i++ {
			ch <- i
		}
	}()
	// 第二个协程
	go func() {
		defer wg.Done()
		for i := 10; i < 20; i++ {
			ch <- i
		}
	}()

	//第三个
	go func() {
		for v := range ch {
			fmt.Println("接收通道数据：", v)
		}
	}()
	go func() {
		wg.Wait()
		close(ch)
	}()
}

// 实现一个带有缓冲的通道，生产者协程向通道中发送100个整数，
// 消费者协程从通道中接收这些整数并打印。
func consumer() {
	var wg sync.WaitGroup
	wg.Add(2)
	ch := make(chan int, 100)
	go func() {
		defer wg.Done()
		for i := 0; i < 100; i++ {
			ch <- i
		}
		close(ch)
	}()

	go func() {
		defer wg.Done()
		for v := range ch {
			fmt.Println("接收通道数据：", v)
		}
	}()
	wg.Wait()
}

func main() {
	// channer()
	// time.Sleep(time.Second * 2)
	consumer()
	// time.Sleep(time.Second * 5)
}
